package edu.neu.cloud_factory.controller;


import com.alibaba.fastjson.JSONObject;
import edu.neu.cloud_factory.entity.po.Device;
import edu.neu.cloud_factory.entity.po.DeviceType;
import edu.neu.cloud_factory.entity.vo.DeviceTypeVo;
import edu.neu.cloud_factory.service.DeviceService;
import edu.neu.cloud_factory.service.DeviceTypeService;
import edu.neu.cloud_factory.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * <p>
 * 设备类型 前端控制器
 * </p>
 *
 * @author halozhy
 * @since 2021-07-15
 */
@RestController
@RequestMapping("/api/device_type")
public class DeviceTypeController {
    @Autowired
    DeviceTypeService deviceTypeService;

    @Autowired
    DeviceService deviceService;
    

    @GetMapping("/list_all")
    public List<DeviceTypeVo> list() {
        List<DeviceType> DeviceTypeList = deviceTypeService.list();
        List<DeviceTypeVo> DeviceTypeVoList = new ArrayList<>();
        DeviceTypeList.forEach(DeviceType -> {
            DeviceTypeVo DeviceTypeVo = new DeviceTypeVo();
            DeviceTypeVo.setId(DeviceType.getDtId());
            DeviceTypeVo.setName(DeviceType.getDtName());
            DeviceTypeVoList.add(DeviceTypeVo);
        });
        return DeviceTypeVoList;
    }

    @PostMapping("/list")
    public JSONObject list(@RequestBody String CONTENT) {
        JSONObject j = JSONObject.parseObject(CONTENT);
        return deviceTypeService.listDeviceType(
                j.getInteger("page"),
                j.getInteger("limit"),
                j.getString("id"),
                j.getString("name")
        );
    }

    @PostMapping("/add")
    public int add(@RequestBody String CONTENT) {
        JSONObject j = JSONObject.parseObject(CONTENT);
        DeviceType deviceType = new DeviceType();
        if (!Utils.checkEmpty(j, Arrays.asList("name"))) {
            return -2; // 存在空字段
        }
        deviceType.setDtName(j.getString("name"));
        deviceTypeService.save(deviceType);
        return 0;
    }

    @PostMapping("/update")
    public int update(@RequestBody String CONTENT) {
        JSONObject j = JSONObject.parseObject(CONTENT);
        if (!Utils.checkEmpty(j, Arrays.asList("id", "name"))) {
            return -2; // 存在空字段
        }
        DeviceType dt = deviceTypeService.getById(j.getInteger("id"));
        if (dt == null) {
            return -1; // 无此产品类型
        }
        dt.setDtName(j.getString("name"));
        deviceTypeService.updateById(dt);
        return 0;
    }

    @GetMapping("/delete")
    public int delete(int dtId) {
        // 当选中的产品类别有订单或者生产中已经关联的产品时不允许删除。
        // 当选中的产品类别有产品时，但是此产品并未进行过生产或下过订单，允许删除此类别，并且同时删除此产品。

        // 检查id所对应的产品类型是否存在
        DeviceType pt = deviceTypeService.getById(dtId);
        if (pt == null) {
            // 无 return -2
            return -2;
        }
        List<Device> DeviceList = deviceService.selectDeviceByDeviceTypeId(dtId);
        if (DeviceList.size() == 0) {
            // 检查产品关联
            // 如果无，直接删除
            deviceTypeService.removeById(dtId);
            return 0;
        } else {
            // 如果有
            return -1; // 当选中的设备类型下有设备时，不允许删除
        }

    }
}

